這一邊有三筆資料
這三個東西看起來都是亂碼,但所代表含意完全不一樣
這邊會跟大家分享這三個東西特性和差異性
此文同步發布 Blog [淺談] 編碼(encoding) vs 加解密 vs 雜湊(Hash)
會想分享這篇文章是因為蠻多人把
這三個東西搞混,尤其是把編碼當作加密....這是非常危險的事情.
編碼!= 加密 兩個是完全不一樣的東西
編碼!= 加密 兩個是完全不一樣的東西
編碼!= 加密 兩個是完全不一樣的東西
很重要所以要說三次XD!
這邊用Base64
編碼來介紹,我們可以看到下圖資料轉換是雙向的.
Hello Daniel => SGVsbG8gRGFuaWVs
如果我們想要把SGVsbG8gRGFuaWVs
變回 Hello Daniel
只需進行Base64
解碼即可
編碼是將原本的資料經過一個運算轉換成另一組資料,如果要還原成原本資料解碼
在網路傳輸會使用到編碼主要是資料在傳輸時有些特殊字元,有特殊用途(ex:Http 傳參數 &....)
這時就可使用編碼將資料轉換成不會衝突到字串.
如果想要了解 Base64 原理和演算法的話可以看我另一篇【深入淺出】Base編碼 (Base64為例子)
這邊以AES
來介紹,我們可以看到下圖資料轉換是雙向,但會透過一個Key來做轉換(這邊是和編碼最大的差別)
要還原成原始資料我們只能透過一樣的Key才可以達成,就像一個寶相只有唯一一把鑰匙可以打開一樣.
這邊補充一個簡單加密法(凱薩算法),他是使用字元位移的數字來當作Key
如果位移數量是1 ABCD => BCDE
如圖
加密可以確保資料的安全性(只有相同的Key才可還原成原本資料)很適合用在機密資料且須要還原使用
這裡用Sha256
來當作範例
Hash有幾個特點
SHA256
的原因是運算完的資料大小一定是 256 bit
一定會有小夥伴好奇,運算完都是固定長度 那會不會出現一個情況,原始資料不一樣但算完Hash
結果是一樣的
會 這個我們稱之為雜湊碰撞 這個機率很小
一般我們可以把使用者密碼經Hash
運算存入資料庫中,當作使用唯一識別碼(像指紋)下次使用者登入用運一樣的Hash
算法 再將值拿來比較辨識使用者合法性.
對於這邊有一個簡單的比較表格
加解密和編碼最常被大家誤會搞錯地方是以為使用Base64
編碼就很安全(但有心人事取得你的資料只要知道你使用編碼就可以還原成原始資料)
如果要確保資料隱密性時可以使用加解密而不是編碼
所以別再把Base64
編碼當作加密工具來使用.
這是很危險低
哇 這篇太受用了
最近剛好在運用sha和base64來傳輸資料
解釋了一下更了解要拿來運用在何處了
感謝大大及時po了這篇
不會 很高興幫助到你
另外如果你想要有想了解 Base64 編碼 演算方式和運作方式 可以參考我另一篇文章
【深入淺出】Base編碼 (Base64為例子)